package com.annotation.demo2;

import java.lang.reflect.Parameter;

/**
 * @ClassName Method
 * @Description 创建一个类，在类中定义一个方法，实现计算1到n的和,方法头如下：
 * public int getSum(@Xxx(value=100) int n) {
 *     ...
 * }
 * @Author Kx
 * @Date 2025/3/28 14:59
 * @Version 1.0
 */
public class Method {

    /***
     * @author: kx
     * @date: 2025/3/28 15:03
     * @param n : 目标数
     * @return int : 总和
     * @description: 获取 1-n 的和
     */
    public int getSum(@MyAnnotation(value = 100) int n) {
        int sum = 0;
        // 判断参数是否小于1
        if (n < 1) {
            return 0;
        }
        try {
            // 获取指定方法
            java.lang.reflect.Method method = this.getClass().getMethod("getSum", int.class);

            // 获取方法参数
            Parameter[] parameters = method.getParameters();

            // 获取注解实例
            MyAnnotation getSum = parameters[0].getAnnotation(MyAnnotation.class);

            // 判断参数是否小于注解中的值
            if(getSum.value() < n){
                throw new IllegalArgumentException("参数不合法");
            }
            // 循环求和
            for (int i = 1; i <= n; i++){
                sum += i;
            }
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        }
        return sum;
    }
}
